package com.itheima.pattern.t22_interpret;

/**
 * 解释器模式：
 * 给定一个语言，定义它的文法表示，并定义一个解释器，这个解释器使用该标识来解释语言中的句子。
 */
public class TestDemo {

    public static void main(String[] args) {
        // 创建环境对象
        Context context = new Context();

        // 创建多个变量对象
        Variable a = new Variable("a");
        Variable b = new Variable("b");
        Variable c = new Variable("c");
        Variable d = new Variable("d");

        // 将变量存储到环境对象中
        context.assign(a, 1);
        context.assign(b, 2);
        context.assign(c, 3);
        context.assign(d, 4);

        // 获取抽象语法树
        AbstractExpression expression = new Plus(new Minus(new Plus(a, b), c), d);
        // AbstractExpression expression = new Minus(a, new Plus(new Minus(b, c), d));

        // 解释(计算)
        int result = expression.interpret(context);
        System.out.println(expression + " = " + result);
    }
}
